unity 学习MoveTowards、Lerp、Slerp SmoothDamp笔记

您所在的位置:网站首页 move to 和move towards unity 学习MoveTowards、Lerp、Slerp SmoothDamp笔记

unity 学习MoveTowards、Lerp、Slerp SmoothDamp笔记

2024-07-08 00:11| 来源: 网络整理| 查看: 265

再unity 过渡通常会用到这些方法 MoveTowards

public static Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);

第一个为当前位置第二个是目标位置 第三个是每次移动的最大长度 第一 每次移动maxDistanceDelta米 并不是跑到终点 第二 再update中maxDistanceDelta*Time.deltaTime即可理解为每秒速度 第三 它可以到终点

Lerp

public static Vector3 Lerp(Vector3 a, Vector3 b, float t);

Lerp表示线性插值 它的作用就是按照t计算a和b之间的插值。t的取值范围是[0, 1]。 简单理解就是当t=0, 返回值是a,当t=1,返回值是b。同理,t=0.1时是a到b的10%。t就代表了a到b的百分比。 注意这里分为两种情况 起点固定与不固定 起点固定的话

if (GUILayout.RepeatButton("Lerp")) { transform.position = Vector3.Lerp(Vector3.zero, tag, 0.1f); }

一直按着按钮 物体只会执行一次 如果想线性运动要使用 首先创建AnimationCurve public AnimationCurve curve; 在这里插入图片描述 然后 x = Time.deltaTime+x; transform.position = Vector3.Lerp(Vector3.zero, tag, curve.Evaluate(x));

当然 在这里插入图片描述 注意不会超过目标距离

起点不固定

transform.position = Vector3.Lerp(transform.position, new Vector3(0,0,10), 0.1f);

在这里插入图片描述 永远到不了

Slerp 一般多在Quaternion的旋转操作时使用。 转载 在这里插入图片描述

SmoothDamp

if (GUILayout.RepeatButton("SmoothDamp")) { //平滑阻尼 transform.position = Vector3.SmoothDamp(transform.position, new Vector3(0, 0, 10), ref currentSpeed, 2); }

currentVelocity 当前速度,每次调用时该函数都会修改该值。 smoothTime 大约达到目标所需的时间。较小的值将更快地达到目标。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3